class Solution {
public:
    int iceBreakingGame(int num, int target) {
        //可以使用动态规划解决
        //dp[i]代表人数为i每次删除第target人之后的最后剩下的人员的编号
        //然后是动态转移方程
        //设 f(n) 表示 n 个人时最后剩下的人的编号。
        //第一轮淘汰的是第 m 个人，其编号为 (m-1) mod n。
        //淘汰后，剩下 n-1 个人，编号重新排列为 t, t+1, ..., t-2，其中 t = m mod n 是下一轮的起点。
        //重新映射关系：
        //新编号 0 对应原编号 t。
        //新编号 1 对应原编号 t+1。
        //新编号 n-2 对应原编号 t-2。
        //因此，n-1 个人的解 f(n-1) 在原问题中的编号为 (f(n-1) + t) mod n。
        //由于 t = m mod n，递归关系可以写成：
        //f(n) = (f(n-1) + m) mod n。
        vector<int> dp(num+1);
        for(int i = 2;i<=num;i++)
        {
            dp[i] = (dp[i-1]+target)%i;
        }
        return dp[num];
    }
};